(function(){

if (typeof (jQuery) == 'undefined') {
    var e = document.createElement('script');
    e.type = 'text/javascript';
    e.src = 'http://code.jquery.com/jquery-latest.min.js';
    e.onload = function () {
        jQueryReady()
    };
    document.getElementsByTagName('head')[0].appendChild(e);
} else jQueryReady();

function jQueryReady() {
	document.body.addEventListener('touchmove', function(e) {
	  e.preventDefault();
	}, false);
    $.get(document.location.pathname, function (data) {
		setStylesheetsEnabled(false);
		/*defaultViewport = $('meta[name="viewport"]').attr('content');*/
		$('meta[name="viewport"]').attr('content','width=device-width;initial-scale=1.0;');
        var p = '<div id="v-s-bookmarklet" style="background:#fff;z-index:9999998;margin:0;position:fixed;top:0;left:0;width:100%;height:100%;overflow:auto"><pre class="language-html" style="white-space:pre-wrap;text-align:left;margin:0;font-family:monospace;position:absolute;top:0;left:0;width:100%">';
		source = alterEntities(data); /* 'escape' entity characters */
		source = replaceURLWithHTMLLinks(source);
		$('body').append(p + source + "</pre></div>"); /* show source */
        $.getScript('http://balupton.github.com/jquery-syntaxhighlighter/scripts/jquery.syntaxhighlighter.min.js', function () {
            $.SyntaxHighlighter.init({ /* highlight syntax */
                'theme': 'google',
                'themes': ['google']
            });
        })
		.fail(function (jqxhr, settings, exception) {

        });
    })
	.fail(function (jqxhr, settings, exception) {
        window.open('https://developers.facebook.com/tools/debug/og/echo?q=' + encodeURIComponent(document.location.href));
    });
}

function alterEntities(d){
	return d.replace(/&((#(34|38|39|60|62|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255|338|339|352|353|376|402|710|732|913|914|915|916|917|918|919|920|921|922|923|924|925|926|927|928|929|931|932|933|934|935|936|937|945|946|947|948|949|950|951|952|953|954|955|956|957|958|959|960|961|962|963|964|965|966|967|968|969|977|978|982|8194|8195|8201|8204|8205|8206|8207|8211|8212|8216|8217|8218|8220|8221|8222|8224|8225|8226|8230|8240|8242|8243|8249|8250|8254|8260|8364|8465|8472|8476|8482|8501|8592|8593|8594|8595|8596|8629|8656|8657|8658|8659|8660|8704|8706|8707|8709|8711|8712|8713|8715|8719|8721|8722|8727|8730|8733|8734|8736|8743|8744|8745|8746|8747|8756|8764|8773|8776|8800|8801|8804|8805|8834|8835|8836|8838|8839|8853|8855|8869|8901|8968|8969|8970|8971|9001|9002|9674|9824|9827|9829|9830))|Aacute|aacute|Acirc|acirc|acute|aelig|AElig|Agrave|agrave|alefsym|Alpha|alpha|amp|and|ang|apos|Aring|aring|asymp|Atilde|atilde|auml|Auml|bdquo|Beta|beta|brvbar|bull|cap|Ccedil|ccedil|cedil|cent|chi|Chi|circ|clubs|cong|copy|crarr|cup|curren|Dagger|dagger|dArr|darr|deg|delta|Delta|diams|divide|eacute|Eacute|ecirc|Ecirc|egrave|Egrave|empty|emsp|ensp|Epsilon|epsilon|equiv|Eta|eta|eth|ETH|Euml|euml|euro|exist|fnof|forall|frac12|frac14|frac34|frasl|gamma|Gamma|ge|gt|harr|hArr|hearts|hellip|Iacute|iacute|Icirc|icirc|iexcl|Igrave|igrave|image|infin|int|iota|Iota|iquest|isin|Iuml|iuml|kappa|Kappa|Lambda|lambda|lang|laquo|lArr|larr|lceil|ldquo|le|lfloor|lowast|loz|lrm|lsaquo|lsquo|lt|macr|mdash|micro|middot|minus|mu|Mu|nabla|nbsp|ndash|ne|ni|not|notin|nsub|ntilde|Ntilde|Nu|nu|Oacute|oacute|Ocirc|ocirc|OElig|oelig|Ograve|ograve|oline|omega|Omega|Omicron|omicron|oplus|or|ordf|ordm|Oslash|oslash|Otilde|otilde|otimes|Ouml|ouml|para|part|permil|perp|Phi|phi|pi|Pi|piv|plusmn|pound|prime|Prime|prod|prop|Psi|psi|quot|radic|rang|raquo|rArr|rarr|rceil|rdquo|real|reg|rfloor|rho|Rho|rlm|rsaquo|rsquo|sbquo|Scaron|scaron|sdot|sect|shy|Sigma|sigma|sigmaf|sim|spades|sub|sube|sum|sup1|sup|sup2|sup3|supe|szlig|Tau|tau|there4|Theta|theta|thetasym|thinsp|THORN|thorn|tilde|times|trade|Uacute|uacute|uArr|uarr|Ucirc|ucirc|Ugrave|ugrave|uml|upsih|Upsilon|upsilon|Uuml|uuml|weierp|xi|Xi|Yacute|yacute|yen|Yuml|yuml|Zeta|zeta|zwj|zwnj);/g, function(entity){
		return entity.replace(/&/,'&amp;');
	}).replace(/</g, "&lt;");
}

function setStylesheetsEnabled(b){
	$('link[rel="stylesheet"]').each(function(){
		this.disabled = !b;
	});
}

function restoreToDefaults(){
	setStylesheetsEnabled(true);
	$('meta[name="viewport"]').attr('content',defaultViewport);
}

})();

function replaceURLWithHTMLLinks(text) { /* flaky */
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href='$1'>$1</a>"); 
}